package com.example.day13;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {
    TextView text1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
        setContentView(R.layout.activity_main);
        text1=findViewById(R.id.text1);
        text1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    /*
    POSTING：如果使用事件处理函数指定了线程模型为PostThread，那么该事件在哪个线程发布出来的，
        事件处理函数就会在这个线程中运行，也就是说发布事件和接收事件在同一个线程。
        在线程模型为PostThread的事件处理函数中尽量避免执行耗时操作，因为它会阻塞事件的传递，甚至有可能会引起ANR。
    MAIN：如果使用事件处理函数指定了线程模型为MainThread，
        那么不论事件是在哪个线程中发布出来的，该事件处理函数都会在UI线程中执行。
        该方法可以用来更新UI，但是不能处理耗时操作。
    BACKGROUND：如果使用事件处理函数指定了线程模型为BackgroundThread，那么如果事件是在UI线程中发布出来的，
        那么该事件处理函数就会在新的线程中运行，如果事件本来就是子线程中发布出来的，
        那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
    ASYNC：如果使用事件处理函数指定了线程模型为Async，那么无论事件在哪个线程发布，
        该事件处理函数都会在新建的子线程中执行。同样，此事件处理函数中禁止进行UI更新操作。
     */

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getData(Data data) {
        String msg = "MainActivity收到了EventBus消息：" + data.getData();
        Log.d("EventBus", msg);
        text1.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }
}
